package ClientAdmin;

import java.util.ArrayList;
import java.util.GregorianCalendar;

import Passager.Passager;
import Serveur.Serveur;
import Transports.*;

import Carte.Trajet;
import Carte.Ville;
import Client.Reservation;

/**
 * Le client Admin est charg� de modifier la liste des Transports et des
 * Trajets.
 * 
 * Il est en charge d'appeler les méthode du serveur.
 * 
 * @author belli
 */
public class ClientAdmin {
	// Uniquement utilis� pour les test
	private Serveur serveur;

	public final static String MDP = "mdp";

	/**
	 * Constructeur par default
	 * 
	 * @param serv
	 */
	public ClientAdmin(Serveur serv, String mdp)
	throws IllegalArgumentException {
		if (!mdp.equals(MDP)) {
			throw new IllegalArgumentException();
		}
		serveur = serv;
		
		System.out.println("Client admin lancé");
	}

	/*
	 * ==========================
	 * Elements pour un transport
	 * ==========================
	 */

	/**
	 * Modifier un tranport en appelant la méthode du serveur
	 * @param old
	 * @param newCapacity
	 * @param prixBillet
	 * @param type
	 */
	public void modifierTransport(Transports old, int newCapacity, double prixBillet, TypeTransport type){
		serveur.modifierTransport(old, newCapacity, prixBillet, type);
	}

	/**
	 * Modifier un tranport en le replacant par un nouveau
	 * @param newTransport
	 * @param old
	 */
	public void modifierTransport(Transports newTransport, Transports old){
		serveur.modifierTransport(newTransport, old);
	}

	/**
	 * Ajouter un transport dans la base de donnée
	 * @param newCapacity
	 * @param prixBillet
	 * @param type
	 */
	public void addTransport(int newCapacity, double prixBillet, TypeTransport type){
		serveur.addTransport(newCapacity, prixBillet, type);
	}

	/**
	 * Ajouter un transport dans la liste
	 * 
	 * @param m
	 */
	public void addTransport(Transports m) {
		serveur.addTransport(m);
	}

	/**
	 * Supprimer un transport de la base de donnée du serveur
	 * @param t
	 */
	public void supprimerTransport(Transports t){
		serveur.removeTransport(t);
	}

	/*
	 * ==========================
	 * Elements pour un trajet
	 * ==========================
	 */

	/**
	 * Modifier un Trajet en appelant la méthode du serveur
	 * @param old
	 * @param newCapacity
	 * @param prixBillet
	 * @param type
	 */
	public void modifierTrajet(Trajet oldtraj, Ville villeDepart, Ville villeArrive, 
			GregorianCalendar dateDepart, GregorianCalendar dateArrive, int placeOccuper, int idTrans, int distance){
		serveur.modifierTrajet(oldtraj, villeDepart, villeArrive, 
				dateDepart, dateArrive, placeOccuper, idTrans, distance);
	}
	public void modifierTrajet(Trajet oldtraj, Ville villeDepart, Ville villeArrive, 
			GregorianCalendar dateDepart, GregorianCalendar dateArrive, int placeOccuper, Transports trans, int distance){
		int idTrans=trans.getIdTransport();
		modifierTrajet(oldtraj,villeDepart,villeArrive,dateDepart,dateArrive,placeOccuper,idTrans,distance);
	}

	/**
	 * Modifier un Trajet en le remplacant par un nouveau
	 * @param newTransport
	 * @param old
	 */
	public void modifierTrajet(Trajet newTrajet, Trajet old){
		serveur.modifierTrajet(newTrajet, old);
	}

	/**
	 * Ajouter un Trajet dans la base de donnée
	 * @param newCapacity
	 * @param prixBillet
	 * @param type
	 */
	public void addTrajet(Trajet t){
		serveur.addTrajet(t);
	}

	/**
	 * Supprimer un Trajet de la base de donnée du serveur
	 * @param t
	 */
	public void removeTrajet(Trajet t){
		serveur.removeTrajet(t);
	}



	/*
	 * ==========================
	 * Elements pour un passager
	 * ==========================
	 */
	public ArrayList<Passager> getListePassager() {
		return serveur.getListePassager();
	}

	/**
	 * Ajouter un passager à la base de donnée
	 * en faisant les verifications qui s'imposent
	 * @param pass
	 */
	public void addPassager(Passager pass){
		serveur.addPassager(pass);
	}
	
	/**
	 * Ajouter un passager à la base de donnée
	 * en faisant les verifications qui s'imposent
	 * @param pass
	 * @return identifiant du passager crée
	 */
	public int addPassager(String nom, String prenom){
		Passager passCourant = new Passager(serveur, nom, prenom);
		serveur.addPassager(passCourant);
		return passCourant.getIdPassager();
	}

	/**
	 * Modifier un passager en lui donnant les inforamtions necessaires
	 * @param pass
	 * @param nom
	 * @param prenom
	 */
	public void setPassager(Passager pass, String nom, String prenom){
		serveur.setPassager(pass, nom, prenom);
	}

	/**
	 * Supprimer un passager en verifiant qu'il n'est pas déja present dans
	 * les reseervations.
	 * @param pass
	 */
	public void removePassager(Passager pass){
		serveur.removePassager(pass);
	}

	/**
	 * Supprimer un passager en verifiant qu'il n'est pas déja present dans
	 * les reseervations.
	 * @param pass
	 */
	public void removePassager(int IDPassager){
		serveur.removePassager(IDPassager);
	}

	/**
	 * Trouver un passager dans la liste des reservation
	 * @param pass
	 */
	public ArrayList<Reservation> getPassagerReservation(Passager pass){
		return serveur.getPassagerReservation(pass);
	}

	/**
	 * Obtenir la personne avec un certain identifiant
	 * @param idPersonne
	 * @return
	 */
	public Passager getPassagerListe(int idPersonne){
		return serveur.getPassagerListe(idPersonne);
	}
	/**
	 * Recuperer un transport dans la liste en 
	 * fonction de son IDTransport
	 * @param IDTransport
	 * @return
	 */
	public Transports getTransportListe(int IDTransport){
		return serveur.getTransportListe(IDTransport);
	}

	/**
	 * Recuperer un trajet dans la liste en 
	 * fonction de son IDTRAJET
	 * @param IDTransport
	 * @return
	 */
	public Trajet getTrajetListe(int IDTrajet){
		return serveur.getTrajetListe(IDTrajet);
	}

	/**
	 * Recuperer une reservation en fonction de son identifiant
	 * @param IDReservation
	 * @return
	 */
	public Reservation getReservationListe(int IDReservation){
		return serveur.getReservationListe(IDReservation);
	}
	
	/*
	 *  ====================================
	 *  Gestion de la liste des reservations
	 *  ====================================
	 */
	
	/**
	 * Supprimer une reservation avec son identifiant
	 */
	public void RemoveReservation(int IDReservation){
		serveur.removeReservation(IDReservation);
	}
}
